package gizwits.kit;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class DateUtil {
	
	private static final String yMd = "yyyy-MM-dd";
	private static final long dayMs = 1000 * 60 * 60 * 24;//一天的毫秒数
	
	public static Date toDate(Date date, String format){
		return toDate(date, null, format);
	}
	
	public static Date toDate(String date, String format){
		return toDate(null, date, format);
	}

	/**
	 * 时间str转date
	 * @param str 时间str
	 * @param format 格式
	 * @return
	 */
	public static Date toDate(Date date, String str, String format){
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		try {
			if(StrKit.notBlank(str)){
					date = sdf.parse(str);
			}else if(date != null){
				return toDate(null,sdf.format(date),format);
			}
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
	
	/**
	 * 时间date转str
	 * @param date
	 * @param format
	 * @return
	 */
	public static String toStr(Date date, String format){
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(date);
	}
	
	/**
	 * 获取星期几
	 * @param date
	 * @return
	 */
	public static int getWeekday(Date date){
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		return c.get(Calendar.DAY_OF_WEEK);
	}
	
	/**
	 * 是否同一天
	 * 参数传date类型
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static boolean isSameday(Date date1, Date date2){
		return isSameday(date1, date2, null, null);
	}
	
	/**
	 * 是否同一天
	 * 参数传str类型
	 * @param strdata1
	 * @param strdata2
	 * @return
	 */
	public static boolean isSameday(String strdata1, String strdata2){
		return isSameday(null, null, strdata1, strdata2);
	}
	
	/**
	 * 是否同一天
	 * date类型和str类型只能传一个类
	 * @param date1
	 * @param date2
	 * @param strdata1
	 * @param strdata2
	 * @return
	 */
	private static boolean isSameday(Date date1, Date date2, String strdata1, String strdata2){
		if(date1 != null && date2 != null){
			return toStr(date1, yMd).equals(toStr(date2, yMd)) ? true : false;
		}else if(strdata1 != null && strdata2 != null){
			return toDate(strdata1, yMd).compareTo(toDate(strdata2, yMd))==0 ? true : false;
		}
		return false;
	}
	
	/**
	 * 判断date1和date2是否同一周
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static boolean isSameWeek(Date date1, Date date2){
		if(date1 != null && date1 != null){
			Date d1 = toDate(date1, yMd), d2 = toDate(date2, yMd);
			if(d1.compareTo(d2)==0){//如果是同一天返回true
				return true;
			}else{
				long differ = Math.abs((d2.getTime() - d1.getTime())) / dayMs;//相差多少天
				if(differ > 6){//一周最多相差6天,大于6肯定不在同一周
					return false;
				}else{
					Calendar c1 = Calendar.getInstance(), c2 = Calendar.getInstance();
					c1.setTime(d1);
					c2.setTime(d2);
					int wd1 = c1.get(Calendar.DAY_OF_WEEK), wd2 = c2.get(Calendar.DAY_OF_WEEK);
					if(d1.before(d2)){//如果date1是date2之前,那么date2的星期数比date1大且小于等于最大星期数
						if(wd1 < wd2 && wd2 <= 7){
							return true;
						}
					}else{//如果date1在date2之后,那么date1的星期数比date2大且小于等于最大星期数
						if(wd2 < wd1 && wd1 <= 7){
							return true;
						}
					}
				}
			}
		}
		return false;
	}
}
